#ifndef CACHE_INTERFACE_H
#define CACHE_INTERFACE_H

#include <string>
#include <memory>
#include <vector>
#include <chrono>

// 缓存接口基类
// 所有缓存实现都必须继承这个接口
template<typename KeyType, typename ValueType>
class ICacheInterface {
public:
    virtual ~ICacheInterface() = default;

    // 将数据放入缓存
    virtual void put(const KeyType& key, const ValueType& value) = 0;

    // 从缓存中获取数据
    // 返回值表示是否找到数据
    virtual bool get(const KeyType& key, ValueType& value) = 0;

    // 从缓存中删除数据
    virtual void remove(const KeyType& key) = 0;

    // 清空缓存
    virtual void clear() = 0;

    // 获取缓存大小
    virtual size_t size() const = 0;

    // 获取缓存容量
    virtual size_t capacity() const = 0;

    // 获取缓存命中率
    virtual double getHitRate() const = 0;

    // 检查键是否存在
    virtual bool contains(const KeyType& key) const = 0;
};

// 缓存条目结构体
// 包含缓存的值和元数据
template<typename ValueType>
struct CacheEntry {
    ValueType value;                                                // 缓存的值
    std::chrono::steady_clock::time_point timestamp;               // 时间戳
    size_t access_count;                                           // 访问次数

    CacheEntry(const ValueType& v)
        : value(v)
        , timestamp(std::chrono::steady_clock::now())
        , access_count(0) {}
};

// 缓存替换策略枚举
enum class EvictionPolicy {
    LRU,    // 最近最少使用
    LFU,    // 最不经常使用
    FIFO,   // 先进先出
    RANDOM  // 随机替换
};

#endif // CACHE_INTERFACE_H